home *** CD-ROM | disk | FTP | other *** search
/ Amiga News 95 / Amiga News 95.iso / dpat / dpat08 / lfreadclock / lfreadclock.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-02-08  |  3.0 KB  |  131 lines

  1. /***************************************************************************
  2.     LFReadClock.c V1.1 13/05/1992
  3.  
  4.     But: Lit l'horloge des cartes Spirits car le READCLOCK founi donne une
  5.     mauvaise date lors des annees bisextiles
  6.  
  7.     Historique :
  8.         * V 1.0 Jan/Fev 1992 : Premiere version,
  9.         * V 1.1 13 mai 1992 : N'éxécute plus Date, affichage en français si
  10.             cette langue a été choisie.
  11.  
  12. ***************************************************************************/
  13. #include <exec/types.h>
  14. #include <devices/timer.h>
  15. #include <time.h>
  16. #include <string.h>
  17. #define FastLF
  18. #define U_ARP
  19. #include <LF.h>
  20. #include <stdlib.h>
  21.  
  22. typedef unsigned char   UCHAR;
  23.  
  24. char stime[10];
  25. char date[10];
  26.  
  27. char lang=0;
  28.  
  29. const char *err_no_clk[]={"Can't find Spirit clock","horloge Spirit absante"},
  30.            *err_op_tmr[]={"Can't open Timer.device","Impossible d'ouvrir le Timer.device"},
  31.            *err_ex_tmr[]={"Can't talk to timer device","Impossible d'envoyer une commande au Timer.device"},
  32.            *sys_clk_ok[]={"System clock updated.","Horloge systeme mise a l'heure."};
  33.  
  34. struct SpiritClk {
  35.     UCHAR   inc;
  36.     UCHAR   vide1;
  37.     UCHAR   sec;
  38.     UCHAR   vide2;
  39.     UCHAR   mn;
  40.     UCHAR   vide3;
  41.     UCHAR   heure;
  42.     UCHAR   vide4;
  43.     UCHAR   js;
  44.     UCHAR   vide5;
  45.     UCHAR   jour;
  46.     UCHAR   vide6;
  47.     UCHAR   mois;
  48.     UCHAR   vide7;
  49.     UCHAR   annee;
  50. };
  51.  
  52. void bcd2char (UCHAR x,char *bf)
  53. {
  54.     char t[2];
  55.  
  56.     t[1]=0;
  57.     *t=(x >> 4)+'0';
  58.     strcat(bf,t);
  59.     *t=(x & 15)+'0';
  60.     strcat(bf,t);
  61. }
  62.  
  63. void setsystemtime(ds)
  64. struct DateStamp *ds;
  65. {
  66. struct timerequest tr;
  67. long secs= ds->ds_Days*86400 + ds->ds_Minute*60 + ds->ds_Tick/TICKS_PER_SECOND;
  68.  
  69. if (OpenDevice(TIMERNAME, UNIT_VBLANK, &tr, 0L)) {
  70.         Puts(err_op_tmr[lang]);
  71.         return;
  72.         }
  73. tr.tr_node.io_Message.mn_Node.ln_Type = NT_MESSAGE;
  74. tr.tr_node.io_Message.mn_Node.ln_Pri = 0L;
  75. tr.tr_node.io_Message.mn_Node.ln_Name = NULL;
  76. tr.tr_node.io_Message.mn_ReplyPort = NULL;
  77. tr.tr_node.io_Command = TR_SETSYSTIME;
  78. tr.tr_time.tv_secs = secs;
  79. tr.tr_time.tv_micro = 0L;
  80. if (DoIO (&tr)) puts(err_ex_tmr[lang]);
  81. CloseDevice (&tr);
  82. }
  83.  
  84. void main()
  85. {
  86.     struct SpiritClk *spc= (struct SpiritClk *)0xdc0ff1;
  87.     struct DateTime dt;
  88.     time_t tt;
  89.  
  90.     OpenArp();
  91.  
  92.     if(!stricmp(getenv("Lang"),"Français"))
  93.         lang=1;
  94.  
  95.     if(spc->inc!=spc->inc){
  96.         Puts(err_no_clk[lang]);
  97.         exit(0);
  98.     }
  99.  
  100.     bcd2char(spc->heure,stime);
  101.     strcat(stime,":");
  102.     bcd2char(spc->mn,stime);
  103.     strcat(stime,":");
  104.     bcd2char(spc->sec,stime);
  105.  
  106.     bcd2char(spc->jour,date);
  107.     strcat(date,"-");
  108.     bcd2char(spc->mois,date);
  109.     strcat(date,"-");
  110.     bcd2char(spc->annee,date);
  111.  
  112.     dt.dat_Format=FORMAT_DOS;
  113.     dt.dat_Flags=DTF_FUTURE;
  114.     dt.dat_StrDate=date;
  115.     dt.dat_StrTime=stime;
  116.  
  117.     StrtoStamp(&dt);
  118.     setsystemtime(&(dt.dat_Stamp));
  119.     puts(sys_clk_ok[lang]);
  120.     switch(lang){
  121.     case 1: /* Français */
  122.         puts(cheure());
  123.         break;
  124.     default :
  125.         time(&tt);
  126.         puts(ctime(&tt));
  127.     }
  128.     CloseArp();
  129.     exit(0);
  130. }
  131.